// grunt入口文件
// 用于执行自定义的任务
// 需要导出一个函数
// 次函数接受一个grunt的形式参数

module.exports = grunt => {
    // 初始化配置选项
    grunt.initConfig({
        foo: '第一个配置选项',
        build: {
            options: {
                sss: 'sddd'
            },
            css: '1',
            js: '2'
        },
        clean: {
            temp: 'tmp/app.js'
        }
    })

    grunt.registerTask('foo', () => {
        console.log('hello grunt')
        console.log(grunt.config('foo'))
    })

    // 第二个参数是任务描述 yarn grunt --help 中可以看到
    grunt.registerTask('bar', '任务描述', () => {
        console.log('bar任务执行')
    })

    // grunt.registerTask('default', () => {
    //     console.log('默认任务执行')
    // })

    // 会依次执行任务
    grunt.registerTask('default', ['foo', 'bar'])


    // 异步任务
    grunt.registerTask('async-task', function() {
        const done = this.async();
        setTimeout(() => {
            console.log('异步任务执行了。..');
            done()
        }, 1000)
    })

    // 标记任务失败, return false
    grunt.registerTask('bad', () => {
        console.log('这个任务失败了');
        return false;
    })
    // 使用--force可以强制任务执行
    grunt.registerTask('aaa', ['bad', 'foo', 'bar'])

    // 异步任务,参数传递false
    grunt.registerTask('async-bad-task', function() {
        const done = this.async();
        setTimeout(() => {
            console.log('异步任务执行了。..');
            done(false)
        }, 1000)
    })

    // 多目标任务,必须在config里定义任务目标
    grunt.registerMultiTask('build', function() {
        console.log(this.options())
        console.log(this.target);
        console.log(this.data);
    })

    // 插件的运用,yarn grunt clean,是一个多目标任务
    grunt.loadNpmTasks('grunt-contrib-clean')

}